# Title     : TODO
# Objective : TODO
# Created by: Administrator
# Created on: 2019/6/18

library(ggplot2)
library(dplyr)
library(tidyr)
library(tibble)
library(optparse)

createWhenNoExist <- function(f) {
  !dir.exists(f) && dir.create(f)
}

option_list <- list(
  make_option("--i", default = "AllMet.csv", type = "character", help = "metabolite data file"),
  make_option("--g", default = "SampleInfo.csv", type = "character", help = "sample group file"),
  make_option("--sc", default = "sample_color.txt", type = "character", help = "sample color file")
)
opt <- parse_args(OptionParser(option_list = option_list))

sampleInfo <- read.csv(opt$g, header = T, stringsAsFactors = F) %>%
  select(c("SampleID", "ClassNote"))

classNotes <- sampleInfo %>%
  .$ClassNote %>%
  unique()

cn <- combn(classNotes, 2)
for (i in 1:ncol(cn)) {
  row <- cn[, i]
  group1Name <- row[1]
  group2Name <- row[2]
  parent <- paste0(group2Name, "_", group1Name)
  createWhenNoExist(parent)
  pcDataFileName <- paste0(parent, "/PCA_", group2Name, "_", group1Name, "_data.txt")
  pc12 <- read.table(pcDataFileName, header = T, sep = "\t", stringsAsFactors = F, comment.char = "") %>%
    as.data.frame() %>%
    select(c("SampleID", "p1", "p2")) %>%
    left_join(sampleInfo, by = c("SampleID"))

  fileName <- paste0(parent, "/PCA_", group2Name, "_", group1Name, "_First2PCs.pdf")
  sampleColDf <- read.table(opt$sc, header = T, sep = "\t", stringsAsFactors = F, comment.char = "") %>%
    select(c("ClassNote", "col"))
  sampleCols <- sampleColDf %>%
    deframe()

  parameterFileName <- paste0(parent, "/PCA_", group2Name, "_", group1Name, "_Parameters.csv")
  parameterData <- read.csv(parameterFileName, header = T, stringsAsFactors = F, comment.char = "")

  impoPc1 <- parameterData[1, "PC1"]
  impoPc1 <- round(impoPc1 * 100, 2)
  impoPc2 <- parameterData[1, "PC2"]
  impoPc2 <- round(impoPc2 * 100, 2)

  p <- ggplot(pc12, mapping = aes(x = p1, y = p2)) +
    xlab(paste("PC1(", impoPc1, "%)", sep = "")) +
    ylab(paste("PC2(", impoPc2, "%)", sep = "")) +
    theme_bw(base_size = 8.8, base_family = "Times") +
    theme(axis.text.x = element_text(size = 9, vjust = 0.5),
          axis.text.y = element_text(size = 8.8), legend.position = 'right',
          axis.title.y = element_text(size = 11), legend.margin = margin(t = 0.3, b = 0.1, unit = 'cm'),
          legend.text = element_text(size = 6), axis.title.x = element_text(size = 11)
    ) +
    #0 line
    geom_vline(aes(xintercept = 0), colour = "#BEBEBE", linetype = "solid") +
    geom_hline(aes(yintercept = 0), colour = "#BEBEBE", linetype = "solid") +
    #point

    stat_ellipse(colour = "#BEBEBE", size = 0.3, level = 0.95, type = "norm") +
    geom_point(aes(colour = factor(ClassNote)), size = 4, stroke = 0) +
    #lengend
    scale_colour_manual("", values = sampleCols)

  ggsave(limitsize = FALSE, fileName, p, width = 5, height = 4)
}




